package br.com.intelsys.iflow.driver.struts;

import java.util.List;

import br.com.intelsys.iflow.IFlowInstanceGeneric;
import br.com.intelsys.iflow.IFlowTransition;

/**
 * Instancia de um determinado processo de processo.
 * 
 * Interface padrao.
 * 
 * @author Patrick Givisiez
 *
 */
public interface IFlowInstanceStruts extends IFlowInstanceGeneric {

	/**
	 * Envia um sinal para o processo. Este sinal fara o processo mudar para o proximo estado.
	 * 
	 * Caso seja enviado um valor nulo e o estado atual possua mais de uma transicao, a primeira transicao definida sera considerada. Caso o estado possua apenas uma transicao, esta sera chamada.
	 * 
	 * @param transitionName Nome da transicao
	 * @return Resultado do signal para ser tratado na action
	 */
	public SignalResult signal(String transitionName);

	/**
	 * Envia um sinal para o processo baseado em uma determinada transicao. Este sinal fara o processo mudar para o proximo estado.
	 * 
	 * Caso seja enviado um valor nulo e o estado atual possua mais de uma transicao, a primeira transicao definida sera considerada. Caso o estado possua apenas uma transicao, esta sera chamada.
	 * 
	 * @param transitionName Nome da transicao
	 * @return Resultado do signal para ser tratado na action
	 */
	public SignalResult signal (IFlowTransition transition);
	
	
	/**
	 * Retorna uma transicao disponivel no estado atual.
	 * 
	 * @param name Nome da transicao
	 * @return
	 */
	public IFlowTransitionStruts getTransition(String name);

	/**
	 * Retorna a lista de todas as transicoes disponiveis.
	 * 
	 * @return Lista com as transicoes disponiveis
	 */
	public List <IFlowTransitionStruts> getTransitionList ();
}
